# encoding=utf-8

import warnings

warnings.filterwarnings('ignore')
#显示中文
from pylab import *  #显示中文

mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib

matplotlib.rcParams['axes.unicode_minus'] = False

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split, GridSearchCV
import warnings
warnings.filterwarnings('ignore')



# 1.	读入数据集
# a)	读取数据iris.txt（5分）
data = pd.read_csv(r'iris.txt', header=None, names=['x1', 'x2', 'x3', 'x4', 'y'])
# b)	将x，y进行切分（5分）
x = data.iloc[:, :-1]
y = data.iloc[:, -1:]
print(y)
# 2.	数据预处理
# a)	将特征进行标准化处理（10分）
x = StandardScaler().fit_transform(x)#数据标准化
# b)	y值进行标签化处理（10分）
lable = LabelEncoder()
y = lable.fit_transform(y)
# c)	使用留出法切分数据，比例为7:3（10分）
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=666, test_size=0.3)

# 使用逻辑回归，完成鸢尾花多分类操作
# 3.	模型创建、处理及评估
# a)	创建逻辑回归模型（10分）
lr = LogisticRegression() # 多分类处理效果
# b)	使用网格交叉验证，分别设置c值为1, 10, 20, 50（10分）
model = GridSearchCV(lr, param_grid={'C': [1, 10, 20, 50]})
# c)	拟合数据（10分）
model.fit(x_train, y_train)
# d)	打印模型得分（10分）
print(model.score(x_test, y_test))#模型得分，准确率
# e)	打印模型最优参数（10分）
print(model.best_params_)#最优参数
# f)	打印模型准确率（10分）
y_ = model.predict(x_test)
print(accuracy_score(y_test, y_))#准确率



